#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <set>

using namespace std;

const int maxn=805;
int a[maxn][maxn],b[maxn][maxn];

struct Triple{
    int x,y,w;
    Triple(int _x=0,int _y=0,int _w=0):x(_x),y(_y),w(_w){}
    const bool operator < (const Triple &t) const {
        if(w==t.w) return x==t.x?y<t.y:x<t.x;
        else return w<t.w;
    }
};
Triple ans[maxn*maxn];

template <typename T> inline void read(T &r){
    char c;bool f=0;
    for(c=getchar();c>'9'||c<'0';c=getchar()) if(c=='-') f=1;
    for(r=0;c<='9'&&c>='0';c=getchar()) r=r*10+c-'0';
    if(f) r=-r;
}

template <typename T> inline T sqr(const T &t){return t*t;}

int main(){
    int n,m,r,c,dx,dy,k,an;

    freopen("matrix.in","r",stdin);
    freopen("matrix.out","w",stdout);

    read(n);read(m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            read(a[i][j]);
    read(r);read(c);
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++)
            read(b[i][j]);
    read(dx);read(dy);read(k);
    an=0;
    for(int x=1;x<=n-r+1;x++){
        for(int y=1;y<=m-c+1;y++){
            int cnt=0;
            for(int i=1;i<=r;i++)
                for(int j=1;j<=c;j++)
                    cnt+=sqr(a[x+i-1][y+j-1]-a[x+dx-1][y+dy-1]-b[i][j]);
            ans[an++]=Triple(x,y,cnt);
        }
    }
    sort(ans,ans+an);
    for(int i=0;i<k;i++){
        printf("%d %d %d\n",ans[i].x,ans[i].y,ans[i].w);
    }
    return 0;
}
